//: [Previous](@previous)
/*:
 
 #38 [Count and Say](https://leetcode.com/problems/count-and-say/description/)
 
 The count-and-say sequence is the sequence of integers with the first five terms as following:
 
 ```
 1.     1
 2.     11
 3.     21
 4.     1211
 5.     111221
 ```
 
 `1` is read off as `"one 1"` or `11`.
 `11` is read off as `"two 1s"` or `21`.
 `21` is read off as `"one 2`, then `one 1"` or `1211`.
 
 Given an integer n where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence.
 
 Note: Each term of the sequence of integers will be represented as a string.
 
 Example 1:
 ```
 Input: 1
 Output: "1"
 ```
 
 Example 2:
 ```
 Input: 4
 Output: "1211"
 ```
 
 */
import Foundation

class Solution {
    func countAndSay(_ n: Int) -> String {
        var s = "1"
        
        for _ in 1 ..< n {
            
            var newS = ""
            var count = 1
            
            for j in 1 ... s.count {
                
                if j == s.count || s[j-1] != s[j] {
                    newS += "\(count)\(s[j-1])"
                    count = 1
                } else { count += 1 }
                
            }
            
            s = newS
        }
        
        return s
    }
}


print(Solution().countAndSay(4))

//: [Next](@next)
